home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 28
/
Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso
/
Aminet
/
util
/
misc
/
replace.lha
/
Replace.e
< prev
next >
Wrap
Text File
|
1998-09-03
|
2KB
|
77 lines
OPT OSVERSION=37,REG=5
MODULE 'exec/memory'
PROC main()
DEF myargs:PTR TO LONG,rdargs,fi,fo,mem:PTR TO CHAR,length,count
DEF out[256]:STRING
myargs:=[0,0,0,0,0]
IF rdargs:=ReadArgs('NAME/A,TO/K,REPLACE/A,WHAT,QUIET/S',myargs,NIL)
IF myargs[4]=FALSE THEN WriteF('Replace v1.0 (\s/\s)\n',myargs[2],IF myargs[3] THEN myargs[3] ELSE 'NIL')
length:=FileLength(myargs[0])
IF mem:=AllocVec(length,MEMF_PUBLIC)
IF fi:=Open(myargs[0],OLDFILE)
Read(fi,mem,length)
count:=xReplace(mem,myargs[2],myargs[3],length)
IF myargs[1] THEN StrCopy(out,myargs[1]) ELSE StringF(out,'\s.new',myargs[0])
IF fo:=Open(out,NEWFILE)
Write(fo,mem,length)
Close(fo)
ELSE
IF myargs[4]=FALSE THEN WriteF('Unable to open file: "\s"\n',out)
ENDIF
Close(fi)
IF myargs[4]=FALSE THEN WriteF('Changes: \d\n',count);
ELSE
IF myargs[4]=FALSE THEN WriteF('Unable to open file: "\s"\n',myargs[0])
ENDIF
FreeVec(mem)
ELSE
IF myargs[4]=FALSE THEN WriteF('Not Enough memory!\n')
ENDIF
FreeArgs(rdargs)
ELSE
PrintFault(IoErr(),'Replace')
ENDIF
ENDPROC
PROC xReplace(mem:PTR TO CHAR,s1:PTR TO CHAR,s2:PTR TO CHAR,length)
DEF pos=0,count=0,s2l,i
WHILE pos<length
pos:=xFind(s1,mem,pos,length)
IF pos=TRUE THEN RETURN count
IF pos<length
IF s2
s2l:=StrLen(s2)
i:=0
WHILE i<s2l
mem[pos]:=s2[i]
i++
pos++
IF CtrlC() THEN RETURN
ENDWHILE
count++
ELSE
s2l:=StrLen(s1)
WHILE s2l
mem[pos]:=0
pos++
s2l--
ENDWHILE
count++
ENDIF
ENDIF
IF CtrlC() THEN RETURN
ENDWHILE
ENDPROC count
PROC xFind(s1:PTR TO CHAR,mem:PTR TO CHAR,pos,length)
REPEAT
REPEAT
IF CtrlC() THEN RETURN
pos++
IF pos>length THEN RETURN TRUE
UNTIL mem[pos]=s1[0]
UNTIL StrCmp(s1,mem+pos,StrLen(s1))=TRUE
ENDPROC pos